#include <math.h>
#include <stdio.h>
#include <stdlib.h>

// 定义一个函数：计算两个整数的较大值，并返回
int max(int a, int b) {
  int max;
  max = a > b ? a : b;
  return max;
}

// return的使用
void show(int age) {
  if (age >= 22) {
    printf("你到了法定结婚年龄");
  } else {
    printf("可以再多谈谈女朋友");
  }
}

// 打印一个矩形，并返回面积
int printr(int h, int w) {
  printf("\n");
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      printf("%s", "★");
    }
    printf("\n");
  }
  return h * w;
}

// 求两个浮点型的最大值
double maxd(double d1, double d2) { return d1 > d2 ? d1 : d2; }

// 求n个整数之和
int sum(int n) {
  int s = 0;
  for (int i = 1; i <= n; i++) {
    s += i;
  }
  return s;
}

// 判断素数
#define TRUE 1
#define FALSE 0
_Bool prime(int n) {
  _Bool b = TRUE;
  for (int i = 2; i <= (int)sqrt(n); i++) {
    if (n % i == 0) {
      b = FALSE;
      break;
    }
  }
  return b;
}

// 任意一个偶数可以写成两个素数之和
_Bool goldbach(int n) {
  for (int i = 2; i <= n / 2; i++) {
    if (prime(i) && prime(n - i)) {
      printf("%d可以写成两个素数%d和%d之和\n", n, i, n - i);
      return TRUE;
    }
  }
  return FALSE;
}

int main(int argc, char *argv[]) {
  /* 定义函数
   */
  show(50);
  int rect = printr(5, 10);
  printf("面积是：%d\n", rect);
  double max = maxd(1.2, 2.1);
  printf("%lf\n", max);
  int s = sum(100);
  printf("%d\n", s);
  _Bool rlt = prime(41);
  if (rlt == TRUE) {
    printf("素数");
  } else {
    printf("非素数");
  }
  while (TRUE) {
    printf("请输入一个大于2的偶数：");
    int input;
    scanf("%d", &input);
    if (input <= 0) {
      break;
    } else if (input % 2 != 0) {
      printf("您输入的不是偶数。\n");
      continue;
    }
    rlt = goldbach(input);
    if (rlt == TRUE) {
      printf("猜想成立\n");
    } else {
      printf("猜想不成立\n");
    }
  }
  return EXIT_SUCCESS;
}
